#include <iostream>
#include <string>

using namespace std;

/*
1. 构造函数与类名同名。
2. 构造函数没有返回值，也不能写 `void`。
3. 构造函数通常设置为 `public` 权限，以便外部能够调用。
4. 构造函数可以有参数，因此==可以发生重载== 
5. 在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次
6. 如果不写构造函数 ， 编译器会默认提供一个==无参构造函数==
    如果写了构造函数 编译器默认不提供


构造函数注意事项
    1、如果写了一个有参构造 并且类中已经没有无参构造了
        此时 我们在实例化这个对象的时候 就需要做有参实例化

        所以在设计类的时候 必须考虑无参的情况

    2、无参构造 或者 有参构造  都尽量不要写在 保护 或 私有权限下
        会导致 外部实例化的时候 无法调用
*/
class stu
{
private:
    /* data */
public:


    // 构造函数 重载
    stu()
    {
        cout << "我是无参构造" << endl;
    }
    stu(string str)
    {
        cout << "我是有参构造" << "传入了:" << str << endl;
    }
    // 析构函数
    ~stu()
    {
        cout << "我是析构" << endl;
    }
};



int main(int argc, char const *argv[])
{
    
    stu s1;
    s1.~stu();
    cout << "hello" << endl;
    
    return 0;
}
